/*
 * txdnet.cn tonydon
 * by netbeans ide 7.2
 */
package txdnet.util;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author tangxiaodong
 */
public class MethodUtil {
    
    /**
     * 判断方法是否开放
     * @param method
     * @return 
     */
    public static boolean isPublicMethod(Method method){
        int flag = method.getModifiers();
        return ( 
                Modifier.isPublic(flag) &&
                !Modifier.isStatic(flag) &&
                !Modifier.isFinal(flag)
                );
    }

    /**
     * 获取某个类所有方法的 {@link Method} 对象
     *
     * @param clazz	: 要查找的类
     * @return	: 失败返回空集合
     */
    public static final Set<Method> getAllMethods(Class<?> clazz) {
        return getAllMethods(clazz, null);
    }

    /**
     * 获取某个类所有方法的 {@link Method} 对象
     *
     * @param clazz	: 要查找的类
     * @param stopClazz	: 终止查找的类（这个类的方法也不被获取）
     * @return	: 失败返回空集合
     */
    public static final Set<Method> getAllMethods(Class<?> clazz, Class<?> stopClazz) {
        Set<Method> methods = new HashSet<Method>();
        while (clazz != null && clazz != stopClazz) {
            Method[] m = clazz.getDeclaredMethods();
            Collections.addAll(methods, m);
            clazz = clazz.getSuperclass();
        }
        return methods;
    }

}
